<?php
/*
 * @Descripttion: 队列消息生产者
 * @version: 
 * @Author: ewgof
 * @Date: 2021-04-27 14:16:58
 * @LastEditors: ewgof
 * @LastEditTime: 2022-12-03 22:16:46
 */
namespace queue;

require __DIR__ . '/functions.php';
// require_once './Driver.php';
// use queue\drivers\RedisDriver;


class Producer
{
    /**
     * @name:
     * @msg: 推送消息到队列
     * @param {array} $handler 指明任务处理逻辑，该参数结构如下： ['class_name', 'method'],其中 class_name 表示类名， method 表示方法名
     * @param {array} $params 传递给方法的参数
     * @param {string} $queue_name 队列名称
     * @param {array} $init_params 传递给方法的参数,如果不是静态方式访问，此参数将会传递到构造函数中，如果 $handler 中指定的 method 是一个静态方法时，此参数被忽略
     * @param {integer} $delays 延迟时间，单位 秒；如果为 0 则不推送延时队列
     * @param {integer} $retry_times 队列任务执行错误重试次数，默认 0 ，无限重试
     * @return {bool}
     */
    public static function push(array $handler, array $params = [], int $retry_times = 0, string $queue_name = 'message_queue_list', array $init_params = [], int $delays = 0)
    {
        $driver = getQueueDriver();
        $driver::connect();
        if (!empty($delays)) {
            $res = $driver::delayPush($handler, $params, $retry_times, $queue_name, $init_params, $delays);
        } else {
            $res = $driver::push($handler, $params, $retry_times, $queue_name, $init_params);
        }
        return $res;
    }
}
